package com.berchen.schedu.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * Quartz定时任务框架
 */
public class QuartzMain {
    /**
     * // 1、创建任务调度器（公交调度站）
     * @return
     */
    public static Scheduler createScheduler() throws SchedulerException {

        SchedulerFactory schedulerFactory=new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        return scheduler;
    }

    /**
     * // 2、创建一个任务（某一个公交车的出行）
     * @return
     */
    public static JobDetail createJobDetail(){

        JobBuilder jobBuilder=JobBuilder.newJob(MyJob.class);  // TODO 自定义任务类
        jobBuilder.withIdentity("jobName","myjob");
        return jobBuilder.build();
    }

    /**
     * // 3、创建任务时间触发器（公交车的出行时间表）
     * cron 表达式由7个位置组成，空格分割
     * 1 seconds 秒 0-59
     * 2 minutes 分 0-59
     * 3 hours 小时 0-23
     * 4 day of month 天 1-31 注意：有的月份没有31天
     * 5 month 月 0-11   或者 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC
     * 6 day of week 周 1-7 或者  SUN,MON,TUE,WEB,THU,FRI,SAT
     * 7 year 年 1970-2099 可选项
     *
     * 示例：
     *  0 0 11 * * ? 每天的11点出发执行一次
     *  0 30 10 1 * ? 每月的1号上午10点半执行一次
     *
     * @return
     */
    public static Trigger createTrigger(){

        // 创建时间触发器
        CronTrigger cronTrigger=TriggerBuilder.newTrigger()
                .withIdentity("triggerName","myTrigger")
                .startNow()
                .withSchedule(CronScheduleBuilder.cronSchedule("*/2 * * * * ? "))
                .build();

        return cronTrigger;
    }

    /**
     *  main函数中开启定时任务
     * @param args
     */
    public static void main(String[] args) throws SchedulerException {

        // 1、创建任务调度器（公交调度站）
        // 2、创建一个任务（某一个公交车的出行）
        // 3、创建任务时间触发器（公交车的出行时间表）
        // 4、使用任务调度器根据时间触发器执行任务
        Scheduler scheduler = QuartzMain.createScheduler();
        JobDetail jobDetail = QuartzMain.createJobDetail();
        Trigger trigger = QuartzMain.createTrigger();
        scheduler.scheduleJob(jobDetail,trigger);
        // 开启定时任务
        scheduler.start();
    }
}


